home *** CD-ROM | disk | FTP | other *** search
- /************************************************************
-
- Intrinsics.h
-
- Copyright Apple Computer,Inc. 1996, 1998
- All rights reserved
-
- Instruction intrinsics are pseudo-functions which may be expanded
- inline by the compiler to provide direct access to selected PowerPC
- machine instructions. If compiler support is not provided for inline
- expansion then references to these functions will generate external
- function references. MrC[pp] versions 2.0 and later recognize the
- intrinsics and perform inlining but earlier versions of MrC do not.
-
- With exceptions noted below, the function's name and prototype follow
- from the machine instruction's name and operands. The function return
- value corresponds to the instruction's destination operand, e.g. FABS;
- the function returns void if there is no destination operand, e.g. STHBRX.
- The function's arguments agree in number and correspond with the
- instruction's source operands. The correspondence is also shown by
- the function argument names in relation to the instruction template
- in the comment next to each function.
-
- The PowerPC architecture manuals describe these instructions in detail.
-
- Naming exception: __setflm does not correspond to a machine instruction.
- It uses two instructions, MFFS and MTFSF, to store the low 32 bits of
- its double argument into FPSCR and return the previous value of FPSCR
- in the low 32 bits of its return value.
-
- ************************************************************/
-
- #ifndef __INTRINSICS__
- #define __INTRINSICS__
-
- #include <ConditionalMacros.h>
-
- #if GENERATINGPOWERPC
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- int __abs(int rB); /* SRAWI rA,rB,31; XOR rT,rB,rA; SUB rD,rT,rA */
- int __cntlzw(unsigned int rS); /* CNTLZW rA,rS */
- void __dcbf(void * rA, int rB); /* DCBF rA,rB */
- void __dcbt(void *rA, int rB); /* DCBT rA,rB */
- void __dcbst(void *rA, int rB); /* DCBST rA,rB */
- void __dcbtst(void *rA, int rB); /* DCBTST rA,rB */
- void __dcbz(void *rA, int rB); /* DCBZ rA,rB */
- void __eieio(void); /* EIEIO */
- double __fabs(double frB); /* FABS frD,frB */
- float __fabsf(float frB); /* FABS frD,frB */
- double __fmadd(double frA,double frC,double frB); /* FMADD frD,frA,frC,frB */
- float __fmadds(float frA,float frC,float frB); /* FMADDS frD,frA,frC,frB */
- double __fmsub(double frA,double frC,double frB); /* FMSUB frD,frA,frC,frB */
- float __fmsubs(float frA,float frC,float frB); /* FMSUBS frD,frA,frC,frB */
- double __fnabs(double frB); /* FNABS frD,frB */
- float __fnabsf(float frB); /* FNABS frD,frB */
- double __fnmadd(double frA,double frC,double frB); /* FNMADD frD,frA,frC,frB */
- double __fnmsub(double frA,double frC,double frB); /* FNMSUB frD,frA,frC,frB */
- float __fnmadds(float frA,float frC,float frB); /* FNMADDS frD,frA,frC,frB */
- float __fnmsubs(float frA,float frC,float frB); /* FNMSUBS frD,frA,frC,frB */
- double __frsqrte(double frB); /* FRSQRTE frD,frB */
- float __fres(float frB); /* FRES frD,frB */
- double __fsel(double frA,double frC,double frB); /* FSEL frD,frA,frC,frB */
- double __fsqrt(double frB); /* FSQRT frD,frB */
- float __fsqrts(float frB); /* FSQRTS frD,frB */
- void __icbi(void *rA, int rB); /* ICBI rA,rB */
- void __isync(void); /* ISYNC */
- long __labs(long rB); /* SRAWI rA,rB,31; XOR rT,rB,rA; SUB rD,rT,rA */
- unsigned int __lhbrx(void *rA, int rB); /* LHBRX rD,rA,rB */
- unsigned int __lwbrx(void *rA, int rB); /* LWBRX rD,rA,rB */
- double __mffs(void); /* MFFS frD */
- unsigned int __mfxer(void); /* MFSPR rD,1 */
- void __mtfsb0(unsigned int BT); /* MTFSB0 BT */
- void __mtfsb1(unsigned int BT); /* MTFSB1 BT */
- int __mulhw(int rA, int rB); /* MULHW rD,rA,rB */
- unsigned int __mulhwu(unsigned int rA, unsigned int rB);/* MULHWU rD,rA,rB */
- int __rlwimi(int rA,int rS,int SH,int MB,int ME); /* RLWIMI rA,rS,SH,MB,ME */
- int __rlwinm(int rS,int SH,int MB,int ME); /* RLWINM rA,SH,MB,ME */
- int __rlwnm(int rS,int rB,int MB,int ME); /* RLWNM rA,rS,rB,MB,ME */
- double __setflm(double frB); /* MFFS frD; MTFSF 255,frB */
- void __sthbrx(unsigned short rS, void *rA, int rB); /* STHBRX rS,rA,rB */
- void __stwbrx(unsigned int rS, void *rA, int rB); /* STWBRX rS,rA,rB */
- void __sync(void); /* SYNC */
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* GENERATINGPOWERPC */
-
- #endif /* __INTRINSICS__ */
-